using System;
using System.IO; 

namespace Zadanie63 // Zadanie 6.3
{
    class Tablice
    {
        FileStream fout, fin;
        
        public void czytaj_dane(int[,] a, int n) 
        {
            int i, j;

            Console.WriteLine("Tworzymy tablic a.");
            Console.WriteLine();

            for (i = 0; i < n; i++) 
            {
                for (j = 0; j < n; j++)
                {
                    if (i == 1) 
                        a[i, j] = 1; 
                    else 
                        a[i, j] = 0;

                    Console.Write(a[i, j] + " "); 
                }
                Console.WriteLine(); 
            }
        }

        public void przetworz_dane(int[,] a, int[,] b, int n) 
        {
            int i, j;

            Console.WriteLine();
            Console.WriteLine("Przepisujemy zawarto tablicy a do tablicy b.");
            Console.WriteLine();

            for (i = 0; i < n; i++)
            {
                for (j = 0; j < n; j++)
                {
                    b[i, j] = a[j, i]; // przepisujemy zawarto tablicy a do tablicy b
                    Console.Write(b[i, j] + " "); 
                }
                Console.WriteLine(); 
            }
        }

        public void zapisz_dane_do_pliku(int[,] b, int n) 
        {
            int i, j;

            Console.WriteLine(); 
            Console.WriteLine("Zapisujemy tablic b do pliku tekstowego.");
            Console.WriteLine();

            fout = new FileStream("dane.txt", FileMode.Create);                       
            StreamWriter fstr_out = new StreamWriter(fout); 

            for (i = 0; i < n; i++)
            {
                for (j = 0; j < n; j++)
                {
                    fstr_out.Write((char) b[i, j]);                    
                    Console.Write(b[i, j] + " "); 
                }
                Console.WriteLine();
            }
            fstr_out.Close();
            fout.Close();
        }

        public void czytaj_dane_z_pliku(int[,] c, int n) 
        {
            int i, j;

            Console.WriteLine(); 
            Console.WriteLine("Odczytujemy tablic c z pliku tekstowego.");
            Console.WriteLine();

            fin = new FileStream("dane.txt", FileMode.Open);                         
            StreamReader fstr_in = new StreamReader(fin);

            for (i = 0; i < n; i++)
            {
                for (j = 0; j < n; j++)
                {
                    c[i, j] = (int)fstr_in.Read();                   
                    Console.Write(c[i, j] + " ");
                }
                Console.WriteLine();
            }
            fstr_in.Close();
            fin.Close();
        }

        static void Main(string[] args)
        {
            const int n = 10;
            int[,] a = new int[n, n]; 
            int[,] b = new int[n, n];
            int[,] c = new int[n, n]; 

            Tablice tab = new Tablice(); 

            tab.czytaj_dane(a, n);
            tab.przetworz_dane(a, b, n);
            tab.zapisz_dane_do_pliku(b, n);
            tab.czytaj_dane_z_pliku(c, n);

            Console.Read(); // naciskamy klawisz Enter
        }
    }
}